home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / g_quake / server~1.zip / _RANDOM.QC < prev    next >
Text File  |  1996-10-04  |  7KB  |  186 lines

  1. /*
  2. **
  3. ** _random.qc (Random Code, 1.0)
  4. **
  5. ** Copyright (C) 1996 Johannes Plass
  6. ** 
  7. ** This program is free software; you can redistribute it and/or modify
  8. ** it under the terms of the GNU General Public License as published by
  9. ** the Free Software Foundation; either version 2 of the License, or
  10. ** (at your option) any later version.
  11. ** 
  12. ** This program is distributed in the hope that it will be useful,
  13. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. ** GNU General Public License for more details.
  16. **
  17. ** You should have received a copy of the GNU General Public License
  18. ** along with this program; if not, write to the Free Software
  19. ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. ** 
  21. ** Author:   Johannes Plass (plass@dipmza.physik.uni-mainz.de)
  22. **
  23. */
  24.  
  25. //========================================================================
  26. //   Defaults
  27. //========================================================================
  28.  
  29. // To change the effect of randomization have a look at the function
  30. // 'RandomInitItem' below.
  31.  
  32. //========================================================================
  33. //   RandomInfo
  34. //========================================================================
  35.  
  36. void(entity player) RandomInfo =
  37. {
  38.   if (!USE_MODULE_RANDOM) return;
  39. };
  40.  
  41. //========================================================================
  42. //   RandomInit
  43. //========================================================================
  44.  
  45. void(entity player) RandomInit =
  46. {
  47.   if (!USE_MODULE_RANDOM) return;
  48. };
  49.  
  50. //========================================================================
  51. //   RandomActiveMessage
  52. //========================================================================
  53.  
  54. void(entity player) RandomActiveMessage =
  55. {
  56.   if (!USE_MODULE_RANDOM) return;
  57.               // 123456789#123456789#123456789#12345678
  58.   sprint(player,"  Random\n");
  59.  
  60. };
  61.  
  62. //========================================================================
  63. //   RandomInitItem
  64. //
  65. //   Identify an item as element of one of the groups AMMO, WEAPON, POWERUP
  66. //   by setting one of the flags RANDOM_TYPE_ITEM, RANDOM_TYPE_WEAPON,
  67. //   RANDOM_TYPE_POWERUP.
  68. //   Since only objects within the same group are mixed changing these
  69. //   flag assigniments is an easy way to change the effect randomization.
  70. //========================================================================
  71.  
  72. float RANDOM_TYPE_AMMO    = 256;
  73. float RANDOM_TYPE_WEAPON  = 512;
  74. float RANDOM_TYPE_POWERUP = 1024;
  75.  
  76. void() RandomInitItem =
  77. {
  78.   local float f, t;
  79.  
  80.   if (!(self.flags & FL_ITEM)) return;
  81.  
  82.   f = 0;
  83.   if (self.touch == health_touch) {
  84.     if      (self.mdl == "maps/b_bh10.bsp")    f = RANDOM_TYPE_AMMO    + 1;
  85.     else if (self.mdl == "maps/b_bh25.bsp")    f = RANDOM_TYPE_AMMO    + 2;
  86.     else if (self.mdl == "maps/b_bh100.bsp")   f = RANDOM_TYPE_POWERUP + 3;
  87.   } else if (self.touch == ammo_touch) {
  88.     if      (self.mdl == "maps/b_shell0.bsp")  f = RANDOM_TYPE_AMMO    + 4;
  89.     else if (self.mdl == "maps/b_shell1.bsp")  f = RANDOM_TYPE_AMMO    + 5;
  90.     else if (self.mdl == "maps/b_nail0.bsp")   f = RANDOM_TYPE_AMMO    + 6;
  91.     else if (self.mdl == "maps/b_nail1.bsp")   f = RANDOM_TYPE_AMMO    + 7;
  92.     else if (self.mdl == "maps/b_rock0.bsp")   f = RANDOM_TYPE_AMMO    + 8;
  93.     else if (self.mdl == "maps/b_rock1.bsp")   f = RANDOM_TYPE_AMMO    + 9;
  94.     else if (self.mdl == "maps/b_batt0.bsp")   f = RANDOM_TYPE_AMMO    + 10;
  95.     else if (self.mdl == "maps/b_batt1.bsp")   f = RANDOM_TYPE_AMMO    + 11;
  96.   } else if (self.touch == weapon_touch) {
  97.     if      (self.mdl == "progs/g_shot.mdl")   f = RANDOM_TYPE_WEAPON  + 12;
  98.     else if (self.mdl == "progs/g_nail.mdl")   f = RANDOM_TYPE_WEAPON  + 13;
  99.     else if (self.mdl == "progs/g_nail2.mdl")  f = RANDOM_TYPE_WEAPON  + 14;
  100.     else if (self.mdl == "progs/g_rock.mdl")   f = RANDOM_TYPE_WEAPON  + 15;
  101.     else if (self.mdl == "progs/g_rock2.mdl")  f = RANDOM_TYPE_WEAPON  + 16;
  102.     else if (self.mdl == "progs/g_light.mdl")  f = RANDOM_TYPE_WEAPON  + 17;
  103.   } else if (self.touch == powerup_touch) {
  104.     if      (self.mdl == "progs/quaddama.mdl") f = RANDOM_TYPE_POWERUP + 18;
  105.     else if (self.mdl == "progs/invulner.mdl") f = RANDOM_TYPE_POWERUP + 19;
  106.     else if (self.mdl == "progs/invisibl.mdl") f = RANDOM_TYPE_POWERUP + 20;
  107.     // don't randomize biosuit
  108.     // else if (self.mdl == "progs/suit.mdl")     f = RANDOM_TYPE_POWERUP + 21;
  109.   } else if (self.touch == armor_touch) {
  110.     if      (self.mdl == "progs/armor.mdl")    f = RANDOM_TYPE_POWERUP + 22;
  111.   }
  112.   if (f) {
  113.     self.random_type   = f;
  114.     self.random_offset = self.origin - (self.absmin + '31 31 0');
  115.   }
  116. };
  117.  
  118. //========================================================================
  119. //   RandomSetOrigin
  120. //========================================================================
  121.  
  122. void(entity item) RandomSetOrigin = 
  123. {
  124.   local entity e,targ;
  125.   local vector orig;
  126.   local float u,t,cont;
  127.  
  128.   //dprint("RandomSetOrigin\n");
  129.  
  130.   e = item;
  131.   cont = 1;
  132.   while (cont) {
  133.     e = nextent(e);
  134.     if (e.random_type) {
  135.       if (e.solid == SOLID_NOT) {
  136.     if ((e.random_type & item.random_type) > 255) {
  137.       if (e.random_type != item.random_type) {
  138.         if (e.random_used <= item.random_used) {
  139.           if (e.random_time + 10 < time) {
  140.         if (e.random_used < item.random_used) cont = 0;
  141.         else { if (random() > 0.5) cont = 0; }
  142.           }
  143.         }
  144.       }
  145.     }
  146.       }
  147.     }
  148.     if (e == item) cont = 0;
  149.   }
  150.   targ = e;
  151.  
  152.   //dprint("Placing: ");
  153.   //dprint(item.netname); dprint(" "); dprint(item.classname); dprint("\n");
  154.   //dprint("   typ="); dprint(ftos(item.random_type)); dprint(" ");
  155.   //dprint("old="); dprint(vtos(item.origin)); dprint(" ");
  156.  
  157.   if (item != targ) {
  158.     u                = targ.random_used;
  159.     t                = targ.random_time;
  160.     orig             = targ.origin - targ.random_offset;
  161.     targ.origin      = item.origin - item.random_offset + targ.random_offset;
  162.     targ.random_used = item.random_used;
  163.     targ.random_time = item.random_time;
  164.     item.origin      = orig + item.random_offset;
  165.     item.random_used = u;
  166.     item.random_time = t;
  167.   }
  168.  
  169.   //dprint("new="); dprint(vtos(item.origin)); dprint(" ");
  170.   //dprint("\n");
  171. };
  172.  
  173. //========================================================================
  174. //   RandomUpdateItem
  175. //========================================================================
  176.  
  177. void() RandomUpdateItem = {
  178.   // called when an item is picked up
  179.   self.random_used = self.random_used + 1;
  180.   self.random_time = time;
  181. };
  182.  
  183.  
  184.  
  185.  
  186.